MBRとGPTは、マスターブートレコード(Master Boot Record)とGUIDパーティションテーブル(GUID Partition Table)の略語です。それらはHDD、SSDまたはリムーバブルデバイスをパーティション化する2つの方式です。
Legacy BIOS の時代においては、HDD/SSD の先頭セクタに MBR (Master Boot Record) と呼ばれる 512 Bytes の特殊な領域があり、ここに「ディスクのパーティション情報」や「ブートストラップ (一次ブートローダー)」が格納されていました。
しかし MBR では 2TiB (≒ 2.2 TB) 以上のパーティションが読み込めない等の制約があり、各種課題をクリアするために GPT (GUID Partition Table) という方式が作られました。
GPT は先頭 512 Bytes は MBR との互換性を保っています。この 512 Bytes の領域を Protective MBR と呼びます。UEFI が GPT を読み込み起動する場合は Protective MBR は無視されます。Master Boot Code のところは下位互換 (Legacy Boot) のためのブートストラップを仕込んでも構いませんが、GPT でのブート前提なら無視されるので 0 bit 列でも構いません。
UEFI が GPT を読み込むと、パーティション情報を把握します。また、UEFI は汎用的なドライバが含まれているため、USB 等のデバイスも認識します。
UEFI は各デバイス (パーティションを含む場合は各パーティションも) の中から自身の優先順位 (Disk が優先か、USB が優先か、等) に従って中身を確認し、それが ESP (EFI System Partition) と呼ばれる領域であれば、その中に含まれるブートローダーを起動します。そのブートローダーは一般には Windows Boot Manager や grub 等です。
一方、Legacy BIOS や UEFI が MBR を読み込むと、MBR に含まれる 1 次ブートローダー (ブートストラップ) が起動し、起動可能パーティションの先頭セクタに含まれる 2 次ブートローダー (Windows Boot Manager や grub) を起動します。
● パーティションテーブル(MBR/GPT)の確認方法
$ sudo parted -l |
Model: ATA TOSHIBA THNSNS25 (scsi) Disk /dev/sda: 256GB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 4194kB 32.2GB 32.2GB primary ext4 boot 2 32.2GB 256GB 224GB primary ext4 |
パーティションテーブルの照会(Partition Table:)
・gpt:this is a GPT partition table
・loop:this is raw disk access without a partition table
・msdos:this is a standard MBR partition table
Linuxシステム起動時のファイルシステムマウント(mountコマンド)やファイルシステムからのファイル読み出しのためには、まずルートディレクトリ("/")の inode情報が必要となりますが、その情報はスーパーブロックに書かれています。ルートディレクトリ以下のディレクトリはその一つ上のディレクトリにinodeブロックが存在するので、順次それを呼び出してゆけば、最後には目的のファイルのinodeが発見できアクセス可能となります。
GRUBには、大きく分けてバージョン0.9x系のGRUB Legacyと、1.9x系のGRUB 2の2種類があります。
GRUBを使用するには、起動ディスクのMBRにGRUBをインストールしなければなりません。そのインストールに使うコマンドが grub-install コマンドです。
● grub-install コマンド構文
grub-install [オプション] [デバイス名] |
|
/dev/hdaにGRUBをインストールするには、
$ sudo parted -l |
# grub-install /dev/hda |
GRUBのバージョンを確認するには、
# grub-install -v grub-install (GNU GRUB 0.97) |
GRUBの設定ファイルは、/boot/grub/grub.confです。(/boot/grub/menu.lstの場合もあります)
パラメータ | 説明 |
timeout | メニューを表示している時間(秒) |
default | デフォルトで起動するエントリの番号 |
title | メニューに表示されるエントリ名 |
root | ルートデバイスの指定 |
kernel | 起動するファイルの指定 |
makeactive | ルートパーティションのアクティブ化 |
chainloader | 指示されたセクターの読み込みを実行 |
hiddenmenu | 起動時の選択メニューを表示しない |
boot=/dev/hda <--- 起動デバイス default = 0 <--- 始動するデフォルトOSを0から番号で指定 timeout = 5 <--- メニューを表示している時間(秒) splash-image=(hda,0)/grub/splash.xpm.gz <--- 起動画面の背景イメージを指定 title CentOS (2.6.9-22nz) <--- 1番目のOSのタイトル。起動画面に表示される root (hda,0) <--- ルートデバイスの指定 kernel /vmlinuz-2.6.9-22n1 ro root=/dev/hda1 <--- 起動するファイルの指定 initrd /initrd-2.6.9-22nz.img title CentOS (2.6.9-11.EL) <--- 2番目のOSのタイトル。起動画面に表示される root (hda,0) kernel /vmlinuz-2.6.9-11.EL ro root=/dev/hda1 initrd /initrd-2.6.9-11.EL.img |
GRUBでは grub コマンドを実行すると、対話式シェルを利用できます。
boot | OSを起動 |
root | GRUBのルートデバイスを設定する |
initrd | 初期RAMディスクをロードする |
install | GRUBをインストール |
setup | GRUBを指定した場所にインストール |
parttype | パーティションタイプを変更する |
makeactive | ルートパーティションのアクティブ化 |
setkey | キーマップを設定する |
GRUB 2 は、BIOS または UEFI ファームウェアを搭載したシステム上の Unified Extensible Firmware Interface (UEFI) ファームウェアからのブートや任意のサイズの GUID パーティションテーブル (GPT) でパーティション分割されたディスクからのブートなど、幅広いプラットフォームとファームウェアのタイプをサポートする強力なモジュラーブートローダーです。GRUB 2 は UEFI 指定の GPT パーティション分割スキームもサポートしています。 GRUB Legacy と同様に、GRUB 2 は 2 段階のブートプロセスを使用します。GRUB 2 と GRUB Legacy の主な違いは、GRUB 2 では動的にロードされたモジュールに多くの機能を配置し、これにより、コア GRUB 2 (第 2 段階ブートローダー) のイメージを小さくできるため、ロードが速くなり、柔軟性が高まることです。結果として、ブート時に要求に応じて GRUB 機能がロードされます。
GRUB 2の設定は主に /etc/default/grub と /etc/grub.d に記述します。update-gurb が実行されるとその結果は /boot/grub/grub.cfg ファイルに書き込まれます。
GRUB2 は様々な方法でコントロールすることができます。既存の設定ファイルにある起動項目はグラフィカルなメニュー (スプラッシュスクリーン) で選択することができます。設定は grub.cfg ファイルから読み込まれますが、 このファイルはさらに他のファイルの内容から生成されます。 GRUB2 では、すべての設定ファイルがシステムファイルという位置付けとなるため、 これらを編集する際は、 root の権限が必要となります。また、 GRUB2 の 設定ファイルを編集した後は、 update-grub(grub2-mkconfig -o /boot/grub2/grub.cfg と同じ)を忘れずに実行してください。
GRUB 2 の場合の設定ファイルは「/boot/grub/grub.cfg」です。
しかし、このファイルを直接編集するのではなく、「/etc/default/grub」のファイルに設定を書き、 update-grub コマンドを実行して「/boot/grub/grub.cfg」の設定ファイルを生成する、という仕組みになっています。
# If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. GRUB_DEFAULT=0 <--- 始動するデフォルトOSを0から番号で指定 GRUB_HIDDEN_TIMEOUT=0 <--- 指定した秒数だけ、ユーザからのキー入力を待ちます。この待機時間の間は、 キー入力が行なわれるまでメニューを表示しません。 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=10" <--- 既定の起動項目を自動的に起動するまでの間、起動メニューを表示して待機する 時間を秒単位で設定します。 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT=quiet splash" <--- 通常モードに 対してだけ、この内容が追加されます。 GRUB_CMDLINE_LINUX=" <--- 通常/復元モードなど、それぞれの起動項目のコマンドラインに対して、ここで 指定された内容が追加されます。 ・ ・ 省略 |
パラメータ | 説明 |
GRUB_DEFAULT | デフォルトのメニューエントリーを設定する。値は数値ないしsaved
|
GRUB_TIMEOUT | デフォルトエントリーが起動されるまでの時間を秒数で指定する。 -1にするとユーザーが選択するまでメニューが表示される。 |
GRUB_HIDDEN_TIMEOUT | デフォルトでは、他のOSが存在するかどうかによって挙動が変わる。他のOSが検出された場合にはメニューが表示される(#が先頭についている)。他のOSが検出されない場合にはメニューは非表示になる。 正の整数が設定された場合、メニューは表示されないが起動はその秒数の間だけ停止する。 0が設定された場合、メニューは表示されず、遅延もない。ユーザーは起動中にシフトキーを押しつづけることでメニューを表示させることができる。起動中、システムはシフトキーの状態をチェックする。状態が確認出来ない場合少しの間起動は止まり、ユーザーはエスケープキーを押すことでメニューを表示できるようになる。 |
GRUB_HIDDEN_TIMEOUT_QUIET | true : カウントダウンは表示されない。画面には何も表示されない。 false : 真っ黒な画面上にGRUB_HIDDEN_TIMEOUTで設定された秒数、カウントダウンが表示される。 |
GRUB_DISTRIBUTOR | メニューエントリーの記述を決定する |
GRUB_CMDLINE_LINUX | カーネルに渡すオプション |
GRUB_CMDLINE_LINUX_DEFAULT | 通常起動のlinuxラインの最後にオプションを付け足す。menu.lstにおけるdefoptionsに相当する。起動過程をテキスト表示したい場合には"quiet splash"を消せばよい。スプラッシュイメージを表示しつつ簡易テキストも表示するなら"splash"を指定する。 |
hiddenmenu | 起動時の選択メニューを表示しない |
Linux カーネルは起動するときに「コマンドラインオプション」あるいは 「起動時パラメータ」を受け付けます。これは一般に、カーネルには決定できないハードウェアのパラメータをカーネルに渡したい場合や、カーネルが検出するであろう値を意図的に無効にしたり変更したりする場合に使います。
カーネルが BIOS から直接起動されるときは、パラメータを指定するチャンスはありません。よって、起動時パラメータ機能を利用するためには、GRUBなどのブートローダがパラメータを指定できるようになっていなければなりません。GRUB の場合は、起動時に Aキーまたは、 Eキーを押すことでパラメータを指定できるようになります。
grub append> root=0303 nousb |
root=デバイス | 最初に起動されるプログラムの指定(initの代わり) |
init=プログラム | GRUBのルートデバイスを設定する |
quiet | メッセージの出力を抑制する |
debug | メッセージの出力を冗長にする(デバッグ用) |
single | シングルユーザモードで起動する |
text | テキストモードで起動する |
1~5 | 指定したランレベルで起動する |
このパラメータは、/proc/cmdlineなどで確認できます。
カーネルを起動する前にブート・パラメータを変更するには、次のステップを実行します。
UEFIブートにおけるブート先は、ブートエントリー(Boot Entry)という形式でUEFIファームウェアにあるブートマネージャ(Boot Manager)に保存されています。
ブートマネージャはブートエントリーを保存するだけでなく、ブートシーケンスも保存しています。
もちろん、このブートシーケンスはBIOSの画面から変更することもできますが、なんとOS上から変更することができます
Linuxであれば「efibootmgr」というコマンドを使うことで変更できます。
「efibootmgr」は、UEFIブートマネージャーを操作するコマンドです。
「efibootmgr」を利用すると、UEFIブートマネージャーに起動エントリーを作成したり、起動エントリーの順番を変更することができます。
$ sudo efibootmgr -v |
BootCurrent: 0003 Timeout: 0 seconds BootOrder: 0003,0002,0000,0001 Boot0000* rEFInd Boot Manager HD(1,28,96000,bc34b60c-6611-492f-99b0-d2c37bd77f48)File(\EFI\refind\shim.efi) Boot0001* fedora HD(1,28,96000,bc34b60c-6611-492f-99b0-d2c37bd77f48)File(\EFI\fedora\grubx64.efi) Boot0002* rEFInd (via PreLoader) HD(1,28,96000,bc34b60c-6611-492f-99b0-d2c37bd77f48)File(\EFI\refind\PreLoader.efi) Boot0003* ubuntu HD(1,28,96000,bc34b60c-6611-492f-99b0-d2c37bd77f48)File(EFI\Ubuntu\grubx64.efi) |
次に起動順序を変更します。
$ sudo efibootmgr -o 0000,0002,0003,0001 |
● systemd系の起動プロセス
grub2-mkconfig は、GRUB 2(GNU GRand Unified Bootloader 2)の起動メニューを生成するコマンドです。環境設定ファイルに従い、grub.cfgを生成します。
起動メニューを生成するのではなく、既存の起動メニューからデフォルト値を指定したい場合は、「 grub2-set-default/grub-set-default」コマンドを使用します。
● GRUBファイルの格納場所
サーバがBIOSもしくはUEFIのどちらを利用しているかで、設定ファイルの格納場所が異なります。
BIOS: /boot/grub2/grub.cfg
UEFI: /boot/efi/EFi/redhat/grub.cfg
GRUB 2構成ファイルは直接編集しません。
grub2-mkconfigコマンドでは、/etc/grub.dのテンプレート・スクリプトおよび構成ファイル/etc/default/grubから取得したメニュー構成設定を使用して構成ファイルを生成します。
# grub2-mkconfig |
grub2-mkconfigは起動用のファイルを生成するため、誤った内容に上書きしてしまう危険性があります。正常に動作しているgrub2.cfgファイルなどを別途バックアップすることをお勧めします。
# grub2-mkconfig -o /boot/grub2/grub.cfg |
grub2-mkconfig [オプション] |
|
-o ファイル名 -output=ファイル名 |
出力する設定ファイル名(指定しなかった場合は標準出力) |
設定ファイルは「/boot/grub/grub.cfg」となっているがこれは「grub-mkconfig」コマンドにより自動生成されるものなので、設定を編集するには「/etc/default/grub」ファイルを編集する。
# vi /etc/default/grub |
編集が終わったらgrub2-mkconfig を実行する。
# grub2-mkconfig -o /boot/grub2/grub.cfg |
設定ファイルが再生成される。
起動時メニュー画面で [c] キーを押すとシェルに入り、追加の入力を受付けるようになる。
grub> set root=(hd0,1) |
grub> linux /vmlinuz-3.10.0-327.el7.x86_64 root=/dev/mapper/centos-root rd.lvm.lv=centos/root |
grub> initrd /initramfs-3.10.0-327.el7.x86_64.img |
grub> boot |
と入力することでカーネルを指定して起動できる。
システムのブート後に起動された全サービスのリストを確認するには、systemctlと入力します。次のように、すべてのアクティブなサービスが表示されます。特定のサービスの詳細情報が必要な場合は、「systemctl status サービス名」 を使用します。
# systemctl |
UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automount loaded active running Arbitrary Executabl> sys-devices-pci0000:00-0000:00:07.1-ata2-host1-target1:0:0-1:0:0:0-block-> sys-devices-pci0000:00-0000:00:10.0-host2-target2:0:0-2:0:0:0-block-sda-s> sys-devices-pci0000:00-0000:00:10.0-host2-target2:0:0-2:0:0:0-block-sda-s> sys-devices-pci0000:00-0000:00:10.0-host2-target2:0:0-2:0:0:0-block-sda.d> sys-devices-pci0000:00-0000:00:11.0-0000:02:01.0-net-ens33.device loaded> sys-devices-pci0000:00-0000:00:11.0-0000:02:02.0-sound-card0.device load> sys-devices-platform-serial8250-tty-ttyS1.device loaded active plugged /sys/> sys-devices-platform-serial8250-tty-ttyS2.device loaded active plugged /sys/> sys-devices-platform-serial8250-tty-ttyS3.device loaded active plugged /sys/> sys-devices-pnp0-00:05-tty-ttyS0.device loaded active plugged /sys/devices/> sys-devices-virtual-block-dm\x2d0.device loaded active plugged /sys/devices/> sys-devices-virtual-block-dm\x2d1.device loaded active plugged /sys/devices/> sys-devices-virtual-net-virbr0.device loaded active plugged /sys/devices/virt> sys-module-configfs.device loaded active plugged /sys/module/configfs sys-module-fuse.device loaded active plugged /sys/module/fuse sys-subsystem-net-devices-ens33.device loaded active plugged 82545EM Giga> sys-subsystem-net-devices-virbr0.device loaded active plugged /sys/subsyste> -.mount loaded active mounted Root Mount boot.mount loaded active mounted /boot dev-hugepages.mount loaded active mounted Huge Pages File System dev-mqueue.mount loaded active mounted POSIX Message Queue File |
起動に失敗したサービスだけを表示する場合は、--failedオプションを指定します。
# systemctl --failed |
systemctl [オプション] [サービス名] |
|
start | サービスを起動する |
stop | サービスを停止する |
restart | サービスを停止し、後で起動します。サービスがまだ起動していない場合は、そのサービスを起動します。 |
try-restart | サービスが現在実行中の場合、サービスを再起動します。実行されていないサービスについては、何も行いません。 |
reload | サービスに対し、操作を中断せずに設定ファイルを再ロードするように指示します。Apacheに、変更後のhttpd.conf設定ファイルを再ロードさせる、などの使用方法をします。すべてのサービスが再ロードをサポートしているとは限らないことに注意してください。 |
reload-or-restart | サービスが再ロードをサポートしていれば再ロードし、サポートしていなければ再起動します。サービスがまだ起動していない場合は、そのサービスを起動します。 |
reload-or-try-restart | サービスが再ロードをサポートしていれば再ロードし、サポートしていなければ再起動します(現在実行中の場合)。実行されていないサービスについては、何も行いません。 |
status | サービスのステータスについて、情報を表示します。systemdコマンドでは、説明、実行ファイル、ステータス、cgroupのほか、直近でサービスが出力したメッセージ(13.6.8項 「サービスのデバッグ」を参照)が表示されます。System V initで表示される詳細のレベルは、サービスごとに異なります。 |
is-active | サービスがアクティブかどうかを示します。 |
サービスを恒久的に有効化/無効化して、必要に応じてPC起動時に自動的にサービス起動したり、常に使用不可にすることもできます。
● systemctl サービス有効化/無効化 オプションenable | サービスを自動起動する |
disable | サービスの自動起動をしません |
is-enabled | サービスの自動起動が有効になっているかどうかを示します。 |
reenable | サービスの再起動と同様に、このコマンドはいったんサービスを無効化した後に有効化します。サービスにデフォルト値を設定して再有効化する場合に利用します。 |
mask | サービスを完全に無効化します。サービスを「無効化」しても、手動で起動できてしまいます。サービスを完全に無効化するには、マスクを設定する必要があります。 注意してご使用ください。 |
unmask | マスクを解除します。マスクを設定したサービスは、マスクを解除しないと使用できません。 |
grubをインストール、または再インストールする場合は、grub-installコマンドを使います。
# grub2-install /dev/sda |
「/dev/sda」のMBRにGRUB2がインストールされる
www.it-shikaku.jp